package com.signway.javaui.utils;

import com.signway.javaui.base.BaseAbilitySlice;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

public class SwLog {
    private static final String TAG = "[SwLog]";
    private static final String TAG_LOG = "SwLog";
    private static final HiLogLabel LOG_LABEL = new HiLogLabel(0, 0, SwLog.TAG_LOG);
    public static final String LOG_FORMAT = "%{public}s: %{public}s";

    /**
     * 禁止构造SwLog - 均使用static变量与方法
     */
    private SwLog() {
    }

    /**
     * 获取通过顶部Slice类名与TAG组合String
     * @return 通过顶部Slice类名与TAG组合String
     */
    private static String getTag() {
        String tag;
        if (BaseAbilitySlice.getTopAbilitySlice() == null) {
            tag = "NULL";
        } else {
            tag = BaseAbilitySlice.getTopAbilitySlice().getClass().getSimpleName();
        }
        return TAG + tag;
    }

    /**
     * 获取object类名与TAg组合String
     * @param object object
     * @return object类名与TAg组合String
     */
    private static String getTag(Object object) {
        String tag;
        if (object == null) {
            tag = "NULL";
        } else {
            tag = object.getClass().getSimpleName();
        }
        return TAG + tag;
    }

    /**
     * 日志打印 - 自定义TAG
     * @param tag TAG
     * @param msg message
     */
    public static void debug(String tag, String msg) {
        HiLog.debug(LOG_LABEL, LOG_FORMAT, TAG + tag, msg);
    }

    /**
     * 日志打印 - 自定义TAG
     * @param tag TAG
     * @param msg message
     */
    public static void info(String tag, String msg) {
        HiLog.info(LOG_LABEL, LOG_FORMAT, TAG + tag, msg);
    }

    /**
     * 日志打印 - 自定义TAG
     * @param tag TAG
     * @param msg message
     */
    public static void error(String tag, String msg) {
        HiLog.error(LOG_LABEL, LOG_FORMAT, TAG + tag, msg);
    }

    /**
     * 日志打印 - 以object.getClass().getSimpleName()作为TAG
     * @param object 调用者对象本身
     * @param msg message
     */
    public static void debug(Object object, String msg) {
        HiLog.debug(LOG_LABEL, LOG_FORMAT, getTag(object), msg);
    }

    /**
     * 日志打印 - 以object.getClass().getSimpleName()作为TAG
     * @param object 调用者对象本身
     * @param msg message
     */
    public static void info(Object object, String msg) {
        HiLog.info(LOG_LABEL, LOG_FORMAT, getTag(object), msg);
    }

    /**
     * 日志打印 - 以object.getClass().getSimpleName()作为TAG
     * @param object 调用者对象本身
     * @param msg message
     */
    public static void error(Object object, String msg) {
        HiLog.error(LOG_LABEL, LOG_FORMAT, getTag(object), msg);
    }

    /**
     * 日志打印 - 自动识别顶部Slice作为TAG - 未完善不建议使用
     * @param msg message
     */
    public static void debug(String msg) {
        HiLog.debug(LOG_LABEL, LOG_FORMAT, getTag(), msg);
    }

    /**
     * 日志打印 - 自动识别顶部Slice作为TAG - 未完善不建议使用
     * @param msg message
     */
    public static void info(String msg) {
        HiLog.info(LOG_LABEL, LOG_FORMAT, getTag(), msg);
    }

    /**
     * 日志打印 - 自动识别顶部Slice作为TAG - 未完善不建议使用
     * @param msg message
     */
    public static void error(String msg) {
        HiLog.error(LOG_LABEL, LOG_FORMAT, getTag(), msg);
    }
}
